1. Field of the Invention
The invention relates generally to the field of software development. More specifically, the invention relates to computer systems and computer implemented methods that organize and classify existing software and enable users to create new software applications using one or more parts of the existing software.
2. Description of the Related Art
Traditionally, the creation of computer applications involves the participation of multiple professionals. Developing a single application requires planning, design, prototyping, development, testing, and deployment. To build and deliver an application, it is required that one or many professionals follow a process that requires problem analysis, solution design, and application development. Although this process should lead to the creation of unique applications, applications that have the same purpose tend to look and behave alike. As a result, hundreds of design and development hours are wasted. A process that aims to produce unique software applications, ultimately ends up generating solutions that are only slightly different from other existing software product of the same purpose.
This problem has been identified by both companies and individuals. They have created software authoring tools that allow non-technical people to develop a software application, yet most software applications are developed by technical people. In this type of authoring tools the user interface is simplified to a point that all what users have to do is to create application interfaces by aggregating tiny elements such as texts, buttons, and images. Although these kinds of tools save a significant amount of time, compared to traditional development methodology, they also introduce new problems.
Specifically, These tools do not take into consideration that the user may have a clear vision of what he or she want to create, so even simple applications interfaces must be built by aggregation. Also, by oversimplifying the interface these authoring tools are less capable of solving real-world programming problems. These tools further do not offer the user ready-to-use design and code options, so the user does not have to reinvent the wheel when trying to address commonly known problems.